package org.domain.sigepac.repository.impl;

import java.util.Collections;
import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.Query;

import org.domain.sigepac.Entity.TipoUsuario;
import org.domain.sigepac.Entity.Usuario;
import org.domain.sigepac.repository.RepositorioGenerico;
import org.domain.sigepac.repository.RepositorioUsuario;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;



/**
 * @author bruno.canto
 */
@Name("repositorioUsuario")
@AutoCreate
public class RepositorioUsuarioImpl extends RepositorioGenerico<Usuario>
    implements RepositorioUsuario {


	public Usuario obterUsuario(Integer id) {

	    Query query = entityManager.createNativeQuery("SELECT * FROM Usuario u WHERE  c.id ="+id);

	    try{
	      return (Usuario) query.getSingleResult();
	    }catch(NoResultException e){
	      e.printStackTrace();
	      return null;
	    }

	}

	public Usuario validarLogin(String login, String senha) {
		try {
			return (Usuario) this.entityManager.createQuery(
					"from Usuario as usuario where usuario.login=:login and usuario.senha=:senha ")
					.setParameter("login", login)
					.setParameter("senha", senha)
					.getSingleResult();
		} catch (Exception e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> pesquisarPorNome(String nome) {
		try {
			return (List<Usuario>) this.entityManager.createQuery(
					"from Usuario as usuario where usuario.ativo=true and upper(usuario.nome) like ?")
					.setParameter(2,"%"+nome.toUpperCase()+"%").getResultList();

		} catch (Exception e) {
			return Collections.EMPTY_LIST;
		}
	}



	@SuppressWarnings("unchecked")
	public List<Usuario> pesquisarPorNome(String nome, TipoUsuario tipo) {
		try {
			return (List<Usuario>) this.entityManager.createQuery(
					"from Usuario as usuario where usuario.ativo=true and upper(usuario.nome) like ? and usuario.tipoUsuario=:tipo")
					.setParameter(1,"%"+nome.toUpperCase()+"%")
					.setParameter("tipo", tipo)
					.getResultList();

		} catch (Exception e) {
			return Collections.EMPTY_LIST;
		}
	}
	@SuppressWarnings("unchecked")
	public List<Usuario> listar(TipoUsuario tipo) {
		// TODO Auto-generated method stub
		return (List<Usuario>) this.entityManager.createQuery(
				"from Usuario as usuario where usuario.tipoUsuario=:tipo and usuario.ativo=true")
				.setParameter("tipo", tipo)
				.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> listar() {
		// TODO Auto-generated method stub
		return (List<Usuario>) this.entityManager.createQuery(
				"from Usuario as usuario where usuario.ativo=true")
				.getResultList();
	}
}
